<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>first</title>
</head>
<body>
  <script>
    /**
     *  强制缓存和协商缓存
     * 
     * 强制缓存
     * 
     * 当浏览器去请求某个文件的时候，
     * 服务端就在response header里面对该文件做了缓存配置。
     * 缓存的时间、缓存类型都由服务端控制
     * 
     * 协商缓存
     * 读取文件时将文件信息给服务器
     * 服务器查看有没有过期，并将结果传达给客户端
     * 客户端：未过期则用缓存 过期重新请求
     * 
     * 协商缓存未过期
     * 发请求-->看资源是否过期（强制缓存）-->过期-->请求服务器-->服务器对比资源是否真的过期-->没过期-->返回304状态码-->客户端用缓存的老资源。
     * 
     * 协商缓存过期
     * 发请求-->看资源是否过期（强制缓存）-->过期-->请求服务器-->服务器对比资源是否真的过期-->过期-->返回200状态码-->客户端如第一次接收该资源一样，记下它的cache-control中的max-age、etag、last-modified等。
     * 
    */

    /**
     * cookie如何防止被恶意读取
     * 
    */
   /**
    * 防抖和节流
    * 
    * 防抖  
    * 触发高频事件后n秒内函数只会执行一次，
    * 如果n秒内高频事件再次被触发，则重新计算时间
    * 例如：
    * 点击事件点击以后的3S触发，
    * 如果在3S内又点击了则重新计算这个3S
    * 
    * 
    * 
    * 节流
    * 高频事件触发，但在n秒内只会执行一次，
    * 所以节流会稀释函数的执行频率
    * 例如：
    * 点击事件在3S后触发，如果没到3S则不执行逻辑，
    * 到了3S后只需，不会被重置
    * 
   */


   /**
      如果浏览器禁用cookie如何处理

      navigator.cookieEnabled 该值可判断浏览器是否禁用 cookie

      cookie 被禁用 localStorage和sessionStorage 还可以用
      如果浏览器cookie被禁用只能将信息暂时存入内存中，
      然后以url的方式将cookie中需要的信息传到服务端


      cookie 和 session

      cookie在客户端 session在服务端

      服务器通过cookie给用户一个sessionID，
      sessionID对应服务器中的一小块内存。
      每次用户访问服务器的时候，服务器通过sessionID 
      读取对应的session，然后获取用户的隐私信息。 
   */

   /**
    polify一个map函数使其可以向下兼容
   
   */


    /**
     * // 编写一个函数计算 localStorage中的单个item存储的字符串的最大长度 ，
       // localStorage.setItem('key', str), 即求字符串str的最大长度。
       // 二分法的使用
     * 
        var max = 99999999
        var min = 0
        var mid = ~~((max + min) / 2)
        var length = 0
        var key = 'key'

        function aaa() {
            var str = ''.padStart(mid, '1')
            try {
                localStorage.setItem(key, str)
                if (max - mid < 2) {
                    length = str.length
                    localStorage.clear()
                    console.log(length + key.length)
                } else {
                    min = mid
                    mid = ~~((max + min) / 2)
                    aaa()
                }
            } catch (err) {
                max = mid
                mid = ~~((max + min) / 2)
                aaa()
            }
        }
        aaa()
   */
  </script>
</body>
</html>